package org.example.utils;

import lombok.extern.slf4j.Slf4j;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
@Slf4j
public class createImage {
    /**
     * 创建书籍封面
     * 使用提供的书籍标题在现有图片上创建一个书籍封面。这个方法读取一个图片文件，然后在图片上绘制标题，最后将修改后的图片写入一个输出流
     *
     * @param BookCoverFile 一个 File 对象，表示要用作书籍封面的图像文件
     * @param bookTitle 要绘制在封面上的书籍标题
     * @param font 用于绘制标题的字体
     * @param fontColor 标题的字体颜色
     * @param file 输出文件，用于保存修改后的图像
     * @throws IOException 如果在图像读取、写入或绘制过程中发生 I/O 错误
     */
    public static void createBookCover(File BookCoverFile, String bookTitle,Font font,Color fontColor,File file) throws IOException {
        BufferedImage image = null;
        Graphics g = null;
        try {
            log.info("开始创建书籍封面 bookTitle: {} BookCoverFile: {} ", bookTitle, BookCoverFile.getAbsolutePath());
            // 读取图像文件
            image = ImageIO.read(BookCoverFile);
            // 获取图像的宽度和高度
            int width = image.getWidth();
            int height = image.getHeight();
            // 创建 Graphics 对象
            g = image.getGraphics();
            // 设置字体和颜色
            g.setFont(font);
            g.setColor(fontColor);
            // 绘制标题（这里设标题绘制在图片中央，需要根据实际情况调整）
            FontMetrics fm = g.getFontMetrics();
            int x = (width - fm.stringWidth(bookTitle)) / 2;
            int y = (height - fm.getHeight()) / 2 + fm.getAscent();
            // 绘制标题
            g.drawString(bookTitle, x, y);
            // 释放 Graphics 对象
            g.dispose();

            String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
            log.info("输出文件扩展名: {} ", fileExtension);
            // 将修改后的图像写入输出流
            ImageIO.write(image, fileExtension, file);
        } finally {
            if (g != null) {
                g.dispose();
            }
        }

        log.info("创建书籍封面成功 图片位置: {} ", file.getAbsolutePath());

    }

}
